Wie erhält man einen Zeiger auf das Fenster einer Konsole? ========================================================== Die folgende Funktion liefert den Window-Zeiger eines CON-Fensters. Sie kann unter allen Versionen des Amiga-OS ausgeführt werden. struct Window *getConWindowPtr(BPTR fh) { struct Window *w; struct FileHandle *cfh; struct StandardPacket *sp; struct InfoData *id; struct MsgPort *mp; w = NULL; if((cfh = BADDR(fh))->fh_Type != NULL) { if(sp = AllocMem(sizeof(struct StandardPacket), MEMF_PUBLIC | MEMF_CLEAR)) { if(id = AllocMem(sizeof(struct InfoData), MEMF_PUBLIC | MEMF_CLEAR)) { if(mp = CreatePort(NULL, 0)) { sp->sp_Msg.mn_Node.ln_Name = (char *)&sp->sp_Pkt; sp->sp_Pkt.dp_Link = &sp->sp_Msg; sp->sp_Pkt.dp_Port = mp; sp->sp_Pkt.dp_Type = ACTION_DISK_INFO; sp->sp_Pkt.dp_Arg1 = MKBADDR(id); PutMsg(cfh->fh_Type, &sp->sp_Msg); (void)WaitPort(mp); (void)GetMsg(mp); if(sp->sp_Pkt.dp_Res1) w = (struct Window *)id->id_VolumeNode; DeletePort(mp); } FreeMem(id, sizeof(struct InfoData)); } FreeMem(sp, sizeof(struct StandardPacket)); } } return w; } Anmerkungen: * Auf ein CON-Fenster direkt zuzugreifen kann Konflikte mit Aktionen des CON-Handlers hervorrufen. Seien Sie vorsichtig! * Um den Window-Zeiger einer CLI-Konsole zu erhalten, übergibt man ein durch Open("*", MODE_OLDFILE) gewonnenes FileHandle an obige Funktion. * Das Ergebnis der obigen Funktion kann sehr wohl NULL sein, etwa im Falle eines AUX-Handlers oder falls ein AUTO-CON-Handler sein Fenster nicht öffnen kann. * Schickt man ein ACTION_DISK_INFO-Paket an einen AUTO-CON-Handler (2.0+), so verliert dessen Fenster seine speziellen AUTO-Eigenschaften (es kann also nicht mehr durch das Betätigen des Close-Gadgets geschlossen werden), weil der in id_VolumeNode gelieferte Window-Zeiger gültig bleiben muß. * Alles in allem: Verwenden Sie diese Funktion nicht. :-) Weitere Informationen finden Sie auf den Seiten 273, 276, 435, 463, 485 und 629 im "Amiga Guru Book" (siehe Dokumentation). Ralph Babel, rbabel